package model;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;

/**
 *
 * @author Alvin & Roy
 */
public class Obstakel extends SpelObject {
    /** Variabele om bij te houden of het obstakel beweegbaar is */
    private boolean movable;

    /**
     * Constructor
     * @param v Het veld waar het obstakel geplaatst wordt
     * @param m Of het obstakel beweegbaar is
     */
    public Obstakel(Veld v, boolean m){
        //constructor van SpelObject
        super(v);
        movable = m;
        //als het obstakel beweegbaar is
        if(movable){
            //haal het plaatje van een beweegbaar object op
            try {
                setImg(ImageIO.read(new File(getIPATH()+"grass2.gif")));
            } catch (IOException e) {
                System.out.println("Fout bij het laden van de recources: " + e);
                System.exit(0);
            }
        //als het obstakel niet beweegbaar is
        }else{
            //haal het plaatje van een beweegbaar object op
            try {
                setImg(ImageIO.read(new File(getIPATH()+"tree.gif")));
            } catch (IOException e) {
                System.out.println("Fout bij het laden van de recources: " + e);
                System.exit(0);
            }
        }
    }

    /**
     * Vraag of het obstakel beweegbaar is
     * @return Beweegbaar ja of nee
     */
    public boolean isMovable(){
        return movable;
    }

    /**
     * Verander de beweegbaar status van een obstakel
     */
    public void changeMovable(){
        movable = !movable;
    }

    /**
     * Beweeg het obstakel
     * @param r De richting om in te bewegen
     * @return Bewegen mogelijk ja of nee
     */
    public boolean move(Richting r){
        //als het object beweegbaar is
        if(movable){
            //haal het buurveld op
            Veld buur = this.getVeld().getBuur(r);
            //als het buurveld bestaat en er staat geen object op
            if(buur != null && buur.getSpelObject() == null){
                //Haal het obstakel van dit object af
                this.getVeld().setSpelObject(null);
                //Zet het obstakel op het buurveld
                buur.setSpelObject(this);
                //Stel het buurveld in als veld van dit obstakel
                this.setVeld(buur);

                return true;
            //anders als de buur wel bestaat maar er een ander obstakel op staat
            }else if(buur != null && buur.getSpelObject() instanceof Obstakel){
                //haal het buurobstakel op
                Obstakel o = (Obstakel)buur.getSpelObject();
                //als het buurobstakel beweegbaar is
                if(o.isMovable()){
                    //beweeg het buurobstakel in dezelfde richting
                    //als het lukt
                    if(o.move(r)){
                        //haal het obstakel van het huidige veld af
                        this.getVeld().setSpelObject(null);
                        //zet het obstakel op het buurveld
                        buur.setSpelObject(this);
                        //stel het buurveld in bij dit obstakel
                        this.setVeld(buur);

                        return true;
                    }
                }
            }
        }
        //als het bewegen niet lukt return false
        return false;
    }
}
